package gui.util;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import model.Alocacao;

public class TableModelAlocacao extends GenericTableModel<Alocacao> {
	private static final long serialVersionUID = 1L;
	
	private String[] columnNames = { "Data Entrada", "Data Saida", "Nome Usuario", "Email Usuario", "Computador" };
	private ArrayList<Alocacao> dados;

	public TableModelAlocacao() {
		dados = new ArrayList<Alocacao>();
	}

	public TableModelAlocacao(List<Alocacao> alocacoes) {
		this();
		setData(alocacoes);
	}

	@Override
	public String getColumnName(int col) {
		return columnNames[col];
	}

	public String[] getColumnNames() {
		return columnNames;
	}

	@Override
	public void setData(List<Alocacao> alocacoes) {
		this.dados.clear();
		this.dados.addAll(alocacoes);
		super.fireTableDataChanged();
	}

	@Override
	public Alocacao getValueAt(int row) {
		return dados.get(row);
	}

	@Override
	public int indexOf(Alocacao entity) {
		return dados.indexOf(entity);
	}

	@Override
	public void clear() {
		this.dados.clear();
		super.fireTableDataChanged();
	}

	@Override
	public void remove(Alocacao entity) {
		dados.remove(entity);
		super.fireTableDataChanged();
	}

	@Override
	public void add(Alocacao entity) {
		dados.add(0, entity);
		super.fireTableDataChanged();
	}

	@Override
	public boolean contains(Alocacao entity) {
		return dados.contains(entity);
	}

	public int getRowCount() {
		return dados.size();
	}

	public int getColumnCount() {
		return columnNames.length;
	}

	public Object getValueAt(int rowIndex, int columnIndex) {
		Alocacao alocacao = dados.get(rowIndex);
		switch (columnIndex) {
		case 0:
			return montaStringData(alocacao.getDataEntrada());
		case 1:
			return montaStringData(alocacao.getDataSaida());
		case 2:
			return alocacao.getUsuario().getNome();
		case 3:
			return alocacao.getUsuario().getEmail();
		case 4:
			return alocacao.getComputador().getDescricao();
		}
		return null;
	}

	@Override
	public List<Alocacao> list() {
		return dados;
	}

	@Override
	public void updateItem(int idx, Alocacao entity) {
		dados.set(idx, entity);
		super.fireTableDataChanged();
	}

	@SuppressWarnings("deprecation")
	public String montaStringData(Date data){
		String stringData = String.format("%02d/%02d/%04d %02d:%02d", data.getDate(), 
								(data.getMonth()+1), (data.getYear()+1900),
								data.getHours(), data.getMinutes());
		return stringData;
	}
}
